import axios from 'axios'
import toast from 'react-hot-toast';
axios.defaults.baseURL = 'http://localhost:3000'
axios.defaults.headers.post['Content-Type'] = 'application/json'//告诉浏览器如果发送的是post请求那么后端一定会返回json格式的数据，让浏览器解析json的方式来解析响应体
// 请求拦截器 --（）所有的请求都会被这个函数拦截下来
axios.interceptors.request.use(request => {
    // 1. 获取本地存储中的token
    const access_token = localStorage.getItem('access_token')
    // 2. 如果token存在，就将token添加到请求头中
    if (access_token) {
        request.headers.Authorization = access_token
    }
    return request//请求放行

})
//响应拦截器
axios.interceptors.response.use(
    (response) => {
        console.log("响应拦截器", response);
        if (response.status === 200) {

            if (response.data.code !== '1') {// 逻辑错误
                toast.error(response.data.msg)
                return Promise.reject(response) //方便在页面上捕获异常
            }

             return Promise.resolve(response.data)
        }


    },
    (res) => {
        if (res.status === 401) {
            // console.log(res)
            // toast.error(res.response.data.msg)
            // setTimeout(() => {
            //     window.location.href = '/login'
            // }, 2000)
            

            //重新请求新的短token和长token
            const originalRequest=res.config

            const refresh_token=localStorage.getItem('refresh_token')
            console.log("你好");
            if(refresh_token){
                //重新请求新的短token和长token
                axios.post('/user/refresh',{
                    refresh_token:refresh_token
                }).then(res=>{
                    if(res.code==='1'){
                        //将新的token存储到本地
                        localStorage.setItem('access_token',res.access_token)
                        localStorage.setItem('refresh_token',res.refresh_token)
                        //将新的token添加到请求头中
                         // 更新原始请求的Authorization头
                        originalRequest.headers.Authorization=res.access_token
                        //重新发送原始请求
                        return axios(originalRequest)//返回新的请求
                    }
                })
            }
        }
        if(res.status===416){//长token 也失效了
            toast.error(res.response.data.msg)
            setTimeout(() => {
                window.location.href = '/login'
            }, 2000)

        }
    }
)







export default axios